// 引入EventEmitter（Node.js内置事件模块）
const EventEmitter = require('events');

/**
 * Dog构造函数（继承EventEmitter，实现定时吠叫功能）
 * @param {string} name - 狗的名字
 * @param {number} energy - 初始精力值（决定吠叫次数）
 */
function Dog(name, energy) {
  // 确保EventEmitter的构造函数被正确调用（继承事件能力）
  EventEmitter.call(this);

  // 初始化Dog实例的属性
  this.name = name;          // 名字
  this.energy = energy;      // 精力值（每次吠叫减1，为0时停止）
  this.isBarking = false;    // 标记是否正在吠叫（避免重复启动定时器）
  this.barkTimer = null;     // 存储定时器ID（用于停止吠叫）
}

// 让Dog原型继承EventEmitter原型（实现完整的事件能力继承）
Dog.prototype = Object.create(EventEmitter.prototype);
// 修复构造函数指向（确保instanceof判断正确）
Dog.prototype.constructor = Dog;

/**
 * 启动吠叫功能（每隔1秒触发bark事件）
 */
Dog.prototype.startBark = function() {
  // 防止重复启动
  if (this.isBarking || this.energy <= 0) {
    return;
  }

  this.isBarking = true;
  const self = this; // 保存this指向（定时器回调中this会改变）

  // 立即触发一次吠叫（避免首次等待1秒）
  self.emit('bark');

  // 启动定时器，每隔1秒触发bark事件
  this.barkTimer = setInterval(() => {
    // 精力值减1后检查是否还有剩余精力
    self.energy--;
    if (self.energy > 0) {
      self.emit('bark'); // 精力充足，继续触发吠叫
    } else {
      self.stopBark(); // 精力耗尽，停止吠叫
    }
  }, 1000); // 1秒 = 1000毫秒
};

/**
 * 停止吠叫功能（清除定时器）
 */
Dog.prototype.stopBark = function() {
  if (this.barkTimer) {
    clearInterval(this.barkTimer); // 清除定时器
    this.barkTimer = null;
    this.isBarking = false;
    // 触发停止事件（可选，用于扩展功能）
    this.emit('stopBark');
  }
};

// 暴露Dog构造函数（供外部模块引入）
module.exports = Dog;